# -*- coding: UTF-8 -*-
import datetime

##############################################################
# Convertisseurs de la base de données (chaînes) vers Python #
##############################################################

def typecast_date(s):
    return s and datetime.date(*map(int, s.split('-'))) # on renvoie None si s est NULL

def typecast_time(s): # ne stocke PAS les informations concernant le fuseau horaire
    if not s: return None
    bits = s.split(':')
    if len(bits[2].split('.')) > 1: # il y a une virgule décimale (comme dans '11:16:36.181305')
        return datetime.time(int(bits[0]), int(bits[1]), int(bits[2].split('.')[0]),
            int(bits[2].split('.')[1].split('-')[0]))
    else: # aucune virgule décimale n'a été trouvée (comme dans '12:30:00')
        return datetime.time(int(bits[0]), int(bits[1]), int(bits[2].split('.')[0]), 0)

def typecast_timestamp(s): # ne stocke PAS les informations concernant le fuseau horaire
    if not s: return None
    d, t = s.split()
    dates = d.split('-')
    times = t.split(':')
    seconds = times[2]
    if '.' in seconds: # on vérifie si les secondes ont une partie décimale
        seconds, microseconds = seconds.split('.')
    else:
        microseconds = '0'
    return datetime.datetime(int(dates[0]), int(dates[1]), int(dates[2]),
        int(times[0]), int(times[1]), int(seconds.split('-')[0]),
        int(microseconds.split('-')[0]))

def typecast_boolean(s):
    if s is None: return None
    return str(s)[0].lower() == 't'

##############################################################
# Convertisseurs de Python vers la base de données (chaînes) #
##############################################################

def rev_typecast_boolean(obj, d):
    return obj and '1' or '0'
